// 入口文件
import Vue from 'Vue'

//创建store状态管理
import Vuex from 'vuex';
Vue.use(Vuex);

// 每当初始化项目的时候，就先从 localStorage 中取一下数据
let car = window.JSON.parse(localStorage.getItem('cart') || '[]')

const store = new Vuex.Store({
    state: {
        //{id,count,selected}
        cart: car
    },
    mutations: {
        addToCar(state, carMsg) {
            let flag = false;
            state.cart.some((item) => {
                if (item.id == carMsg.id) {
                    item.count += carMsg.count;
                    flag = true;
                    return true;
                }
            });
            if (!flag) {
                state.cart.push(carMsg)
            }
            //把购物车中的数量存到本地存储当中，刷新也不会失去这些数据
            localStorage.setItem('cart', JSON.stringify(state.cart));
        },
        upDateCart(state,goods){
            state.cart.some(item=>{
                if(item.id==goods.id){
                    item.count=goods.count;
                    return true;
                }
            })
        //把购物车中的数量存到本地存储当中，刷新也不会失去这些数据
        localStorage.setItem('cart', JSON.stringify(state.cart));
        console.log(JSON.parse(localStorage.getItem('cart')));
        },
        deleteCart(state,id){
            state.cart.some((item,i)=>{
                if(item.id==id){
                    state.cart.splice(i,1)
                    return true;
                }
            })
        //把购物车中的数量存到本地存储当中，刷新也不会失去这些数据
        localStorage.setItem('cart', JSON.stringify(state.cart));
        console.log(JSON.parse(localStorage.getItem('cart')));
        },
        selectedChange(state,obj){
            state.cart.some(item=>{
                if(item.id==obj.id){
                    item.selected=obj.selected;
                    return true;
                }
            })
        //把购物车中的数量存到本地存储当中，刷新也不会失去这些数据
        localStorage.setItem('cart', JSON.stringify(state.cart));
        console.log(JSON.parse(localStorage.getItem('cart')));
        }
    },
    getters: {
        count(state) {
            let c = 0;
            state.cart.forEach(item => c+=item.count)
            return c;
        },
        idstr(state){
            let Arr=[];
            state.cart.forEach((item)=>{
                Arr.push(item.id)
            })
            return Arr.join(',')
        },
        countObj(state){
            let o={};
            state.cart.forEach(item=>o[item.id]=item.count)
            return o;
        },
        selectedObj(state){
            //id对应的商品是否被选中
            let o={};
            state.cart.forEach(item=>o[item.id]=item.selected)
            return o;
        },
        selectedcount(state){
            //勾选商品的数量
            let c=0;
            state.cart.forEach(item=>{
                if(item.selected){
                    c+=item.count;
                }
            });
            return c;
        },
        amount(state){
            let a =0;
            state.cart.forEach(item=>{
                if(item.selected){
                    a+=item.count*item.price
                }
            })
            return a;
        }
    }
})

export default store;